package com.itheima.admin.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.itheima.admin.dto.AdChannelPageRequestDto;
import com.itheima.admin.mapper.AdChannelMapper;
import com.itheima.admin.pojo.AdChannel;
import com.itheima.admin.service.AdChannelService;
import com.itheima.common.vo.PageResultVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.Date;

/**
 * @version 1.0
 * @description 频道管理业务实现
 * @package com.itheima.admin.service.impl
 */
@Service
@Slf4j
public class AdChannelServiceImpl extends ServiceImpl<AdChannelMapper, AdChannel> implements AdChannelService {
    /**
     * 频道分页查询
     *
     * @param dto
     * @return
     */

    @Override
    public PageResultVo<AdChannel> findPage(AdChannelPageRequestDto dto) {

        //1. 分页参数设置
        IPage<AdChannel> pageSetting = new Page<>(dto.getPage(),dto.getSize());

        //2. 查询条件构建
        LambdaQueryWrapper<AdChannel> queryWrapper = Wrappers.<AdChannel>lambdaQuery();

        // 如果名称不为空，模糊查询. 当p1为true，这个条件才会生效
        //2.1名称使用模糊查询
        queryWrapper.like(StringUtils.isNotEmpty(dto.getName()),AdChannel::getName,dto.getName());
        //2.2状态使用精确查询
        queryWrapper.eq(null!=dto.getStatus(),AdChannel::getStatus,dto.getStatus());

        //3. 分页查询
        page(pageSetting, queryWrapper);

        //System.out.println("============pageSetting==pageInfo=>" + (pageSetting==pageInfo));  //验证二者相等，
        // 因为二者是同一个对象所以用一个作为对象就可以了，让代码简洁一点。

        //4. 组装分页结果返回
        return PageResultVo.pageResult(dto.getPage(),dto.getSize(), pageSetting.getTotal(), pageSetting.getRecords());
    }

    /**
     * 添加频道
     *
     * @param adChannel
     */

    @Override
    public void add(AdChannel adChannel) {

        //1. 补充数据字段
        adChannel.setAsDefault(false);
        adChannel.setCreatedTime(new Date());

        //2. 执行添加
        save(adChannel);
    }
}
